{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4.2 分箱与离散化\n",
    "<p>特征分箱:即连续特征划分为多个组(离散化)，每个组相当于一个箱子.然后将该特征转化为多个分类特征(比如one-hot编码)</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1fa72abbfd0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd3gURR+A39lLI0IEQi9JsIBSQgexAIqCDSwolqgICipWUETFzx4bioIFRUVFYgVRRCwoCFIsgNIFRUMvSSgBQpLL7Xx/7O3lyt7lktzlUuZ9nn2SbJmdzd7Nb+ZXhZQShUKhUNQ8tEh3QKFQKBSRQQkAhUKhqKEoAaBQKBQ1FCUAFAqFooaiBIBCoVDUUKIi3YHS0KBBA5mSkhLpbigUCkWVYuXKldlSyobe+6uUAEhJSWHFihWR7oZCoVBUKYQQW632KxWQQqFQ1FCUAFAoFIoaihIACoVCUUOpUjYAK+x2Ozt27CA/Pz/SXVFUAHFxcbRo0YLo6OhId0WhqPJUeQGwY8cO6tSpQ0pKCkKISHdHEUaklOTk5LBjxw5atWoV6e4oFFWeKq8Cys/PJzExUQ3+NQAhBImJiWq1pwgJGRkZpKSkoGkaKSkpZGRkRLpLFU6VXwEAavCvQah3rQgFGRkZjBw5kry8PAC2bt3KyJEjAUhLS4tk1yqUKr8CUCgUimCwO3SmLt7CxO83ceeY+12Dv0leXh7jx4+PUO8igxIAIeaxxx7jhRdeKNO1p59+esDjF154IQcPHixT2+588cUXbNiwodztKBRViXU7D/H0vL+YvOAfDuzbbXnOtm3bKrhXkUUJgErEsmXLAh6fN28edevWLfd9AgmAoqKicrevUFRGinSj+NUHN/UgOTnJ8pykJOv91RUlAEJAeno6bdq04dxzz2XTpk2u/Vu2bOH888+na9eunHXWWfz1118A7N27l8suu4yOHTvSsWNH18Bfu3ZtAHbv3k3v3r3p1KkT7du35+effwaMVBjZ2dkATJw4kfbt29O+fXtefvllADIzMzn11FMZMWIE7dq1o3///hw7dsyjr8uWLWPOnDmMHTuWTp06sWXLFvr27ctDDz1Enz59mDRpEitXrqRPnz507dqVAQMGsHv37oDPo1BUBczih5oQpKenEx8f73E8Pj6e9PT0CPQsclQLI7DJ41+tZ8Ou3JC22bZZAo8ObOf3+MqVK/n444/5448/KCoqokuXLnTt2hWAkSNH8sYbb3DyySfz66+/MmrUKBYsWMBdd91Fnz59mD17Ng6HgyNHjni0+eGHHzJgwADGjx+Pw+Hw0VWuXLmSd999l19//RUpJT179qRPnz7Uq1ePv//+m48++oi33nqLIUOGMGvWLK677jrXtaeffjqDBg3i4osv5oorrnDtP3jwIIsWLcJut9OnTx++/PJLGjZsyCeffML48eOZNm2a3+dRKKoCulMCCIoNvaPHjiNr9y6atWjB888+U6MMwFDNBEAk+Pnnn7nssstcs4lBgwYBcOTIEZYtW8aVV17pOregoACABQsWMH36dABsNhvHH3+8R5vdu3dn+PDh2O12Lr30Ujp16uRxfMmSJVx22WUcd9xxAFx++eX8/PPPDBo0iFatWrnO79q1K5mZmUE9x1VXXQXApk2bWLduHeeddx4ADoeDpk2bBnwehaIq4BIATk+ytLQ0Ejuew60zVjHvrrNo2ywhkt2LCNVKAASaqYcTK9dEXdepW7cuf/75Z6nb6927N4sXL+brr7/m+uuvZ+zYsdxwww2u49Jcy1oQGxvr+t1ms/mogPxhChMpJe3atWP58uUex3Nzc8v8PApFpcClAireZX539QDfqeqMsgGUk969ezN79myOHTvG4cOH+eqrrwBISEigVatWfPbZZ4AxsK5evRqAfv36MWXKFMCYYefmeqqttm7dSqNGjRgxYgQ33XQTq1at8rnnF198QV5eHkePHmX27NmcddZZQfe5Tp06HD582PJYmzZtyMrKcgkAu93O+vXrAz6PQlEVcNqAPSZsmvP3Gjr+KwFQXrp06cJVV11Fp06dGDx4sMdAnJGRwTvvvEPHjh1p164dX375JQCTJk1i4cKFdOjQga5du7J+/XqPNn/66Sc6depE586dmTVrFnfffbfPPW+88UZ69OhBz549ufnmm+ncuXPQfb766quZMGECnTt3ZsuWLR7HYmJimDlzJuPGjaNjx4506tTJZaT29zwKRVVAOpcA7isA8/eaugIQgdQJlY1u3bpJ74IwGzdu5NRTT41QjxSRQL1zRVlYtDmLodN+Y9ZtveiaXB+AhX/tY9h7vzN71Ol0TqoX4R6GDyHESillN+/9agWgUChqBN5GYON381gkehR5lABQKBQ1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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 下图为线性模型与决策树模型的比较\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "import numpy as np\n",
    "import mglearn\n",
    "import matplotlib.pyplot as plt\n",
    "X,y = mglearn.datasets.make_wave(n_samples=100)\n",
    "line = np.linspace(-3,3,1000,endpoint=False).reshape(-1,1) # 生成1000行1列的数组\n",
    "reg = DecisionTreeRegressor(min_samples_split=3).fit(X,y)\n",
    "plt.plot(line,reg.predict(line),label='decision tree')\n",
    "\n",
    "reg = LinearRegression().fit(X,y)\n",
    "plt.plot(line,reg.predict(line),label=\"Linear Regression\")\n",
    "\n",
    "plt.plot(X[:,0],y,'o',c='k')\n",
    "plt.ylabel(\"Regression output\")\n",
    "plt.xlabel(\"Input feature\")\n",
    "plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>当特征只有一个时,线性模型就是一条直线，而决策树可以构建更为复杂的模型。为了构建复杂的线性模型，我们可以采用分箱的方法构建更多的特征</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "bins:[-3.  -2.4 -1.8 -1.2 -0.6  0.   0.6  1.2  1.8  2.4  3. ]\n"
     ]
    }
   ],
   "source": [
    "bins = np.linspace(-3,3,11) #生成10个箱子\n",
    "print(f\"bins:{bins}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data:\n",
      "[[-0.75275929]\n",
      " [ 2.70428584]\n",
      " [ 1.39196365]\n",
      " [ 0.59195091]\n",
      " [-2.06388816]]\n",
      "Bin membership:\n",
      "[[ 4]\n",
      " [10]\n",
      " [ 8]\n",
      " [ 6]\n",
      " [ 2]]\n"
     ]
    }
   ],
   "source": [
    "# 使用np.digitize函数计录每个数据点所属的箱子\n",
    "which_bin = np.digitize(X,bins=bins)\n",
    "print(f\"Data:\\n{X[:5]}\")\n",
    "print(f\"Bin membership:\\n{which_bin[:5]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
      " [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n",
      " [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import OneHotEncoder\n",
    "# 使用OneHotEncoder进行变换\n",
    "encoder = OneHotEncoder(sparse=False)\n",
    "# encoder.fit找到which_bin中的唯一值\n",
    "encoder.fit(which_bin)\n",
    "# transform创建one-hot编码\n",
    "x_binned = encoder.transform(which_bin)\n",
    "print(x_binned[:5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_binned.shape:(100, 10)\n"
     ]
    }
   ],
   "source": [
    "print(f\"x_binned.shape:{x_binned.shape}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1fa7326fd90>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhU5dn48e89YxAQghqhLkCCrVJZQoAA7mixYG1F1FrbN7X42kottWq11oX+jKipC9bdYvEVtC+pS1UUX21F6y6bBGRRREUTFlEhCiKLhOT+/TGTYZLMTGY5Z84s9+e6zpXkzJxznjMzOfecZ7kfUVWMMcbkH5/XBTDGGOMNCwDGGJOnLAAYY0yesgBgjDF5ygKAMcbkqb28LkAiDjjgAC0pKfG6GMYYk1Vqamo2qWr31uuzKgCUlJSwaNEir4thjDFZRUTqIq23KiBjjMlTFgCMMSZPWQAwxpg8lVVtAJE0NDSwbt06du7c6XVRTBp07NiRnj17UlBQ4HVRjMl6WR8A1q1bR9euXSkpKUFEvC6OcZGqUl9fz7p16+jTp4/XxTEm62V9FdDOnTspKiqyi38eEBGKiorsbs84orq6mpKSEnw+HyUlJVRXV3tdpLTL+jsAwC7+ecTea+OE6upqJkyYwPbt2wGoq6tjwoQJAFRUVHhZtLTK+jsAY4xJ1KRJk0IX/2bbt29n0qRJHpXIGxYAHHbttddy6623JrXt0UcfHfPxU045hc2bNye173BPPfUU7777bsr7MSZbrVmzJqH1ucoCQAaZO3duzMefe+459t1335SPEysA7N69O+X9G5PpevfundD6XGUBwAFVVVX07duXk046iVWrVoXWr169mpNPPpmhQ4dy3HHH8d577wHw2WefcfrppzNo0CAGDRoUuvB36dIFgA0bNnD88cdTVlbGgAEDeP3114FAKoxNmzYBcNtttzFgwAAGDBjAHXfcAUBtbS1HHHEE559/Pv3792f06NHs2LGjRVnnzp3L7NmzufzyyykrK2P16tWccMIJXH311YwcOZI777yTmpoaRo4cydChQxkzZgwbNmyIeT7GZJuqqio6d+7cYl3nzp2pqqryqETeyIlG4GaTn3mHdz/5ytF99ju4kMpT+0d9vKamhkceeYQlS5awe/duhgwZwtChQwGYMGEC9913H4cddhgLFixg4sSJvPTSS1x00UWMHDmSWbNm0djYyNdff91in//4xz8YM2YMkyZNorGxsU1dZU1NDTNmzGDBggWoKiNGjGDkyJHst99+fPDBBzz88MPcf//9/OQnP+GJJ57g5z//eWjbo48+mrFjx/KjH/2IH//4x6H1mzdv5tVXX6WhoYGRI0fy9NNP0717dx599FEmTZrE9OnTo56PMdmmuaF30qRJrFmzht69e1NVVZVXDcCQYwHAC6+//jqnn3566NvE2LFjAfj666+ZO3cuZ511Vui533zzDQAvvfQSf//73wHw+/1069atxT6HDRvGeeedR0NDA+PGjaOsrKzF42+88Qann346++yzDwBnnHEGr7/+OmPHjqVPnz6h5w8dOpTa2tq4zuPss88GYNWqVaxYsYLvf//7ADQ2NnLQQQfFPB9jslFFRUXeXfBby6kAEOubupsidU1sampi33335e233054f8cffzyvvfYazz77LOeccw6XX345v/jFL0KPq2rUbffee+/Q736/v00VUDTNwURV6d+/P/PmzWvx+FdffZX0+RhjMpO1AaTo+OOPZ9asWezYsYOtW7fyzDPPAFBYWEifPn345z//CQQurEuXLgVg1KhRTJ06FQh8w/7qq5bVVnV1dfTo0YPzzz+fX/7ylyxevLjNMZ966im2b9/Otm3bmDVrFscdd1zcZe7atStbt26N+Fjfvn3ZuHFjKAA0NDTwzjvvxDwfY0x2sgCQoiFDhnD22WdTVlbGmWee2eJCXF1dzQMPPMCgQYPo378/Tz/9NAB33nknL7/8MgMHDmTo0KG88847Lfb5yiuvUFZWxuDBg3niiSe4+OKL2xzz3HPPZfjw4YwYMYJf/epXDB48OO4y//SnP2XKlCkMHjyY1atXt3isQ4cOPP7441xxxRUMGjSIsrKyUCN1tPMxxmQniVWdkGnKy8u19YQwK1eu5IgjjvCoRMYL9p4bkxgRqVHV8tbr7Q7AGGPylAUAY4zJUxYAjDEmT3kWAESkl4i8LCIrReQdEbm4/a2MMcY4xctxALuBy1R1sYh0BWpE5AVVtSxlxhiTBp7dAajqBlVdHPx9K7ASOMSr8hhjTL7JiDYAESkBBgMLIjw2QUQWiciijRs3prtocWlO4hbuvvvuC6V7SJcTTjiBvn37MmjQIIYNG5ZRo3Znz57NTTfd5HUxjDFhPE8FISJdgCeAS1S1TSY3VZ0GTIPAOIA0Fy9pF1xwgav7V1VUFZ+vZQyvrq6mvLycGTNmcPnll/PCCy+kfKzGxkb8fn9K+xg7dmwoT5IxJjN4egcgIgUELv7Vqvqkl2VxWvjEMCeccAJXXHEFw4cP5/DDDw+ld25sbOTyyy9n2LBhlJaW8re//Q0IJJIbNWoUQ4YMYeDAgaERt83pnidOnMiQIUNYu3Zt1OMfddRRrF+/HoBt27Zx3nnnMWzYMAYPHhza3/bt2/nJT35CaWkpZ599NiNGjKB5oF2XLl245pprGDFiBPPmzWPmzJkMHz6csrIyfv3rX9PY2EhjYyPnnnsuAwYMYODAgdx+++0A3HXXXfTr14/S0lJ++tOfAvDggw9y4YUXAoFUF6NGjaK0tJRRo0aFJuE499xzueiiizj66KM59NBDefzxx517Q0zesLl+4+fZHYAEMqg9AKxU1dsc2em/roRPlzuyq5ADB8IPUq+62L17NwsXLuS5555j8uTJvPjiizzwwAN069aNt956i2+++YZjjjmG0aNH06tXL2bNmkVhYSGbNm3iyCOPDH17XrVqFTNmzOCvf/1rzOP9+9//Zty4cUAg9/n3vvc9pk+fzubNmxk+fDgnnXQSU6dOZb/99mPZsmWsWLGiRdbRbdu2MWDAAK677jpWrlzJzTffzJtvvklBQQETJ06kurqa/v37s379elasWAEQmq3spptu4uOPP2bvvfeOOIPZhRdeyC9+8QvGjx/P9OnTueiii3jqqaeAwFwIb7zxBu+99x5jx45tkbLamPbYXL+J8bIK6BjgHGC5iDRXVl+tqs95WCbXnHHGGUDLFM1z5sxh2bJloW+6W7Zs4YMPPqBnz55cffXVvPbaa/h8PtavX89nn30GQHFxMUceeWTU41RUVLBt2zYaGxtDSeTmzJnD7NmzQ3ckO3fuZM2aNbzxxhuhPEMDBgygtLQ0tB+/38+ZZ54JwH/+8x9qamoYNmwYADt27KBHjx6ceuqpfPTRR/zud7/jhz/8IaNHjwagtLSUiooKxo0bFwpC4ebNm8eTTwZu+M455xz++Mc/hh4bN24cPp+Pfv36hc7ZmHjFmuvXAkBbngUAVX0DaJtHORUOfFN3S3OaZr/fH5p2UVW5++67GTNmTIvnPvjgg2zcuJGamhoKCgooKSlh586dwJ60zdFUV1czaNAgrrzySn7729/y5JNPoqo88cQT9O3bt8VzY+WB6tixY6jeX1UZP348N954Y5vnLV26lOeff557772Xxx57jOnTp/Pss8/y2muvMXv2bK6//vo2ye5aC0+nHZ7OOpvyVJnMYHP9JiYjegHlqzFjxjB16lQaGhoAeP/999m2bRtbtmyhR48eFBQU8PLLL1NXV5fQfgsKCrjhhhuYP38+K1euZMyYMdx9992hC+qSJUsAOPbYY3nssccAePfdd1m+PHL12ahRo3j88cf5/PPPAfjiiy+oq6tj06ZNNDU1ceaZZ3L99dezePFimpqaWLt2LSeeeCK33HILmzdvbjPj2dFHH80jjzwCBALWsccem9D5GRONzfWbGM97AeWC7du307Nnz9Dfl156aVzb/epXv6K2tpYhQ4agqnTv3p2nnnqKiooKTj31VMrLyykrK+O73/1uwmXq1KkTl112Gbfeeiv33HMPl1xyCaWlpagqJSUl/N///R8TJ05k/PjxlJaWMnjwYEpLS9vMTgbQr18/brjhBkaPHk1TUxMFBQXce++9dOrUif/+7/+mqakJgBtvvJHGxkZ+/vOfs2XLFlSV3//+920msr/rrrs477zzmDJlCt27d2fGjBkJn58xkVRVVbVoA4D8nOs3XpYOOo81NjbS0NBAx44dWb16NaNGjeL999+nQ4cOXhctJnvPTSzV1dV5P9dva9HSQdsdQB7bvn07J554Ig0NDagqU6dOzfiLvzHtsbl+42dtAHmsa9euLFq0iKVLl7Js2TJ+8IMfeF0kYzJCvowlyIk7AFWNODG7yT3ZVGVpslM+jSXI+juAjh07Ul9fbxeGPKCq1NfX07FjR6+LYnJYrLEEuSbr7wB69uzJunXryNREccZZHTt2bNHjyhin5dNYgqwPAAUFBfTp08frYhhjckTv3r0jjr3JxbEEWV8FZIwxTqqqqqJz584t1uXqWAILAMaYrOZ0j52KigqmTZtGcXExIkJxcTHTpk3LuQZgsABgTNbLly6LkTT32Kmrq0NVQz12nAgCtbW1NDU1UVtbm5MXf8iBkcDG5LPWXRYhUF2Rq99YWyspKYlYX19cXBzKumuijwS2AGBMFsv3C6DP54vYBVxEQjmqjKWCMCYn5VOXxWZrP1zOpo+WAnBg9/3Z8Hl9m+cc2H1/lsyZ6fixe3xnKIcc6m4eqnTmMrIAYEwWy6cui812PXwOgxs/BmDKsbuY8Axsb9jzeOcCmHLsNgbP/a3jx161sC/8aaHj+22W7lHIVgVkTBbLxzaAdZP78sXevdjnlOsAmP3sHG69+z42fPo5Bx3Ygz/87gLG/nC048fd8exVdGn4gpJrHJ52NoxbVXrRqoBQ1axZhg4dqsaYlmbOnKnFxcUqIlpcXKwzZ870ukiuuvuMb+mB+3VK+/nWTDlVayf3c/X1FhEF2iwiktJ+gUUa4ZpqVUDGZLl8Sn9cXV3NH5/5nB0NgZqLdCZqU/Hz9NIvuepm96po0l2lZ+MAjDFZY9KkSaGLf7Pt27dz8cUXu35sFR+3/Gejq4ni0j0K2QKAMSZrROvdVF9f7/oAOBUfn2zZHfExp3pdpXsUsgUAY0zWiFUV4nq6ZvFzSLfIteZOVtGkcxSyBQBjTNaIVRXi9tgHFR9Xj9o3pxLFWQAwxmSNiooK9usUefY/t8c+qPg5a2DnnEoUZwHAGJNVbvrBvnQs8LdY1/pbuCsJ8sSHj6acShRnAcAYD+RzBs9U/WRgJ6782dFRv4W7lSG0OQDkEgsAxqSZaxeoPOFDOXn4YVG/hbs1p6+K3wKAMSY1+TTpuBtEm1CJfulyLUGez49fLQAYY1KQjxk8nSQAMQJAtMbgSOsTqoqzOwBjTKoSuUBlg3S3ZwQuwpF7AkH8o2kTrYpT8eO3AGCMSUUuTTruRXuGoDHvAOIdTZtwVZxI4NgO8rwzQKQMcZm6WDZQkytyJYNncXFxxOyVxcXFrh1z5zVFOve+C1PeT6KZN+fef4k2XtMt5eM2mzlzpnbu3LnFsTt37uzKZ4Eo2UDtDsAYD+RKX3Iv2jOEJpDoVUDxSrgqTvz4RFGHpprMhM4AFgCMMUnzoj3D104VULwSrorzBQafNTZGTgiXqEzoDNDuqygix8SzLhkiMl1EPheRFU7szxiTXl60Z/hQxIEAkGjmTRFnA0AmdAaI51W8O851yXgQONmhfRlj0izd6Yu1qSlQDeNAAIDEquI0WO3Uugoo2YbcTOgMEHVGMBE5Cjga6C4il4Y9VAj4I2+VGFV9TURKnNiXMcYb6ZyRTFXbHQfgFolQBZTKJO7Nj0+aNIk1a9bQu3dvqqqq0toeFOtV7AB0IRAkuoYtXwE/dr9oASIyQUQWiciijRs3puuwxpgM1NTUGPjFgUbghIUCQGNoVaoNuV53BogaAFT1VVWdDBypqpPDlttU9YN0FVBVp6lquaqWd+/ePV2HNcakwIn+7ZH2EejRuKc+Ph2ay3H0z6+l5I6tPPboo6HHojXY1tXVZUeyv0h9Q8MX4GXgpdZLe9vFuwAlwIp4nmvjAEwuyZWxAK050b892j4enDFdtbJQ5z54lYtnELscnTp1Cp1LtHEQrccYuNW/P15EGQcQzwV6aNhyDHAbcEt728W7WAAw+Sidg4DSzYnBYdH20atXr0AAeOhP7p1AHOVoPpdI72O0AWZuDo5rT7QA0G5LiqrWhC1vquqlwIj2touHiDwMzAP6isg6EfmlE/s1JtNlwiAgtzjRvz3ac9etWweApKkNoL1zidQLSjVyuohMTPYXtRdQMxHZP+xPH4E7gQOdOLiq/syJ/RiTbTJhEJBbevfuTV1dXcT1qe6jZ89DgK/S1gsoWjm+tW9nFtw9HoDvAI9eNjL02LjKJ/j0y21ttlFVDtq/Cxf8aDAnDzs04bJ866TfUXJEecLbxdJuAABqCNzCCLAb+Biwb+rGpMCJi2SmqqqqatE1EhLv3x5tH9f8vz/B+j+mLQBEKkenAmHyiR04rP6liNtMPrEDlzyznR0Nbe8EPv1yGzc/8iYHbXuHHw/cJ6GyfFJ/ZmKFj0ekeqFMXawNwOSKXG4DUHWmgTvSPjbXf65aWajzqq93odTxlyPebYjQFoAH7QFEaQMQjVJf1UxEOgITgWODhX8DmKqqO50PR7GVl5frokWL0n1YY1xRXV3t6SCgbLR506fse09f5ve9giN/drXXxWmXz+eL2CYgIjQ5lFQuHiJSo6pt6o/iqQL6O7CVPekffgb8L3CWc8UzJv+kcwRtrmgeCCa+7MhjmelVffG8in1V9Zeq+nJwmQAc7nbBjDGJCR84dcABB3DAAQdk/kCkVtobQBb61uxBKohkRMr3IyKccsopHpWopXhexSUicmTzHyIyAnjTvSKZXOX57Ec5rPXMXPX19dTX16Oanlm6nBDX7GJZFgAqKioYP358i26rqspDDz2UGe9HpIaB8AVYCTQBtcGlCXgHWA4sa297JxdrBM5eud7o6bVYDY5kwECkaMIbWP1+f7vl/nz9x6qVhbrgn3/xrMyJ8mLWtNaI0ggcTxuApWs2SQlv5PT5fC2SaMGegU9WD566eMYPZNoYg9aZNFt/PpqFl3tPMrjsuAOAzB7zEc+reIOq1oUv4evcLqDJTq1v5+P55zbJi6dRMVMaHptFGg0dSXi5Q7n4s6QRGDJj4pdo4nkV+4f/ISJ7ERgNbExUyfxzm/hEakuJ1NgYLt0TjcQjnuDfutzNjcBOzAiWLpkw8Us0UV9FEblKRLYCpSLylYhsDf79GfB02kposlIy/9ymfdEaSoEWOWmKioooKipKyyxdyWov+IsI48ePb1HuPbNxeTAfQJLSPWtaQiI1DIQvwI3tPSddizUCZ49oDV9+vz/n0h+nUyY0KDolUseA9s5r7QfLVSsL9a2n/+pNobMUKTQC/0tEjo8QOF5LMfaYHBYtl0vGfPPJUpnSoLjp07V8/PCl+BuTTwhwBHD1aYdzz79W8enmHRGfs6aujsW3nhr6e6/d2+kJWdUInMniCQCXh/3eERhOIEHc91wpkckJmTDfaS7KlJGldYvnMGzLHNbJgeyWgjaPP7V0M7f+53M+2dLAwd0K+MOoHowbtG+b51V8Fyq+eyjH3vY+67c0tHn84G4F7L/94xbrPvR/m+6HDXPuZPJZpNuCWAvQC3g40e2cWKwKyOS7TBlPseDJu1QrC3X9RysdKePMmTO1oKCgxTYFBQVWTegQkp0QJoJ1wAAHYo8xJkGZ0qCouwL57vfu3KXNY8lOdtN6kpd0TfqSz9oNACJyt4jcFVzuAV4HlrpfNGNMJBUVFdTW1tLU1ERtba0n1Wr6TSAAdNqna5vHkmmnmDRpErt27WqxbteuXTkxQ1osXqdHiacNIDz/8m4C1T+WC8iYPKYNgUbbjp3a3gFEa6fYf//926xrlimN2+nUeiR0eJfedAX1eOYEfgh4mEDD71JgoduFMsZkNmnYzg7tgM/vb/NYVVUVHTp0aLP+q6++ivoNN5NHy7olE+aFjmdCmBOAhwgkghMCjcDj1YNuoDYhjDEtfbr2Qz59P/3/E7JoOr13rGS/a9dGfPyAAw6gvr6+zfri4mJqa2vbrG/9bRhyv9twOieLSWVCmL8Ao1V1VXBHhxO4I7B0EMZ4rP5/z6Vs13JPjl3r681+UR774osvIq6PVqVTUVHBm2++ybRp02hsbMTv97cZBZxrMqFLbzwBoKD54g+gqu+LROj4a0w7bArE2JJ5ffbZvZkVe5ex98nXp6mUexzQ87CojyV6cauuruahhx4KJQ1sbGzkoYce4phjjsnZz0i0wZJpTY8SqW9o+AJMBx4ATggu9wMz2tvOjcXGAWSvTOm/nk6JTCae7OuzofLbuvD2s50uesoSPZ9cSnGRiGQmnE8GUcYBxBMA9gYuBZ4EZgG/B/Zubzs3FgsA2Svf/sHTdQH8svJgnX/3uS6cQXxiXcASubiJSMTzF5F0nEbOSzoAZNJiASB75ds/eKIX9GRfn2+u2V/n3nehC2fQPifv6vLtC0K6RQsAllHJpEW+dfNLtF97Mq/P3x96iMPv/JJjLrjHk0FETnZjzOSc+bksnkZgY1KWEQ1eLtnyxUY+nP4r9tq9LbTuwG57s2Fz20yZ3Tr5WXrTSW3W/3rEPlz3iY+dDXu6/3Us8PHrEftEfP5zSzZw3az32NkQ6EboxSAiJwdvWfJAb9gdgEmLTMlh44Z1Kxcy9OtX2G/XJ3TavYVOu7dw2UkHUeBvm8vm6527ebHmo9DzmpczB3bmhtOKObhbBwQ4uFsHbjitmDMHdm7z3E67t3DP8x+2CBaQ/kFETt/VZUKKi7wTqV4ofAEOJ9DzZw7wUvPS3nZuLNnUBpCu1n3jveWvPaVaWajvzPtXi/VFRUWu1WtnQptKPvbsylakMCHMP4H7gkEg8szepoVMyPFh0kc18E3c12qSkkQHQyUiEwYRWbVN9ounCmi3qk5V1YWqWtO8uF6yLJYJOT5M+oTmqfW1/Hdys+E7UxpNrdomu8UTAJ4RkYkicpCI7N+8uF6yLJaPmQ3zWfMdgLS6A3DzIp3LbSomfeKpAhof/Bk+NaQChzpfnNyQCbfnJo00UDMqvpaZMd2uIqmoqLALvklJuwFAVfukoyC5JJe7PJq2tCnQFVN8bW+o7SJtMlk8M4IViMhFIvJ4cLnQqWRwInKyiKwSkQ9F5Eon9pkJ7PY8v2hT8A5ArFe1yS7xfGKnEkj9/NfgMjS4LiUi4gfuBX4A9AN+JiL9Ut1vprDGsfwR6GXXtgooV3g9baFxTzxtAMNUdVDY3y+JiBNzAg8HPlTVjwBE5BHgNOBdB/ZtTPoE2wB8vtybxNy6NOe2eO4AGkXk281/iMihODMe4BAgfDqhdcF1LYjIBBFZJCKLNm7c6MBhjdvy7RvjnjaA3LsDsC7N7siU/5F4AsDlwMsi8oqIvEpgJPBlDhw70telNvOjqeo0VS1X1fLu3bs7cFgTr2Q+pM3fGOvq6lDV0DfGnA4CmvltAMlecKxLs/My6n8k0vDg1guBOQFKgUE4NBcAcBTwfNjfVwFXxdomm1JBZLv2hvlHS3WRj2l933rmb6qVhVq3aonXRYkolZQN7b2flvIkcV78j5DofADA94I/z4i0RNsu3oVA+8NHQB+gA7AU6B9rGy8DQL590GN9SCNdUKLlpgl/PFe99fRU1cpCXfPBsrQdM5HPYyoXnFjBw3IBJceLPE7JBIDJwZ8zIizTo22XyAKcArwPrAYmtfd8rwJAPn7QY31Io11QYi2JfLvJtmC78Kl7VSsLdd3qFWk5XqKfx1QvOHa356ysuAPIxMWrAJCPH/RY59zet/3WSyLBMtOCbTzBaOGsu1UrC3X9RyvTUqZEP49ufX4zISNpNvLiM550AAAuBgoJNNr+D7AYGN3edm4sXgWAfPygx/qQxnsHkMw3+EwKtvH+oy548k7VykL9pPa90HZu3sEk+nl064KTSe9Vtkn3XW4qAWBp8OcYYDaBhuDF7W3nxmJ3AOkV7UMa6YLi1GuTScE23vd9weO3q1YW6oY1H6Tl210yn0c3LjiZdrdmokslACwL/rwTOD34+5L2tnNjsTaAzBF+J9D6op3Ka5NJwTbeYLTgn39RrSzUz9Z9lJbyZ9LnMdvaa/JVKgFgBoHZwD4AOgNdgZr2tnNjsV5AmcnJ1yaTLm7xXsznPzZFtbJQN66vTdsdjH0eTSKiBQAJPBadBEa3lAEfqerm4FwAPVV1WcwNXVBeXq6LFi1K92FNApoaG1n46I3ojs1J7+P5+Su578nX+fyLrfTYvysXnHEcY448ov0NfX6+PfoCehziTALb1mkQIJDVtXVivwWP3cKId6vYdMEKyo88LmIq8OLiYmprax0plzGJEpEaVS1vvT6eXEBHAW+r6jYR+TkwhEB1kDFtfPzuWxz5/pSU9nHUIXDt74RA3wOAN2DtG3FtO/8FPz3O/XNKx28Wdz7/5ikhfb6sTQVeXV1tUzvmo0i3BeELsIxAD6BBwd8vBl5tbzs3FrergLLxtjrTyrxy/vOqlYW67NUn03rcpsZG1cpCnfs/l6X1uKqq8/5RpVpZqF9u3KCq6XtPnDpOJlW7GXeQQhvA4uDPa4Bfhq9L9+JmAMjGf4JMLPOyV59UrSwMBII0a7hmX5077aK0H3de9fWqlYW6uf7ztB3Tyfc+kxrejTuiBYB4sldtFZGrgHOAZ4N5/B2ZECaTZGPWw0ws8+6d2wDYq+M+6T82fqSxIe3Hba4CijQjmFucfO8t4Vv+iucTezbwDXCeqn5KIGVzapW8GSgb/wkyscyNuwIXpQ6dnA0A8WSzbMRPc2bOtAprAwjnZspfJ9/7aHNV2xzWua/dABC86D9BICMowCZglpuF8kI2/hNkYpmbvtlO9fJdHPO9Hzp24Ys3fe5u8fYOIDwAuJ3y18n3vqqqis6dO7dYlw0N18YBkeqFwhfgfOAtYHXw78OA/7S3nRuLtegEHikAABPmSURBVAG0lIllvnbiWdq5IPlcQJHEW0ddX9lT59/1ixTPIHFzH7xatbJQd2zbGlrndr260+99pnUmMM4iShtAPN1Af0tg+sYFwYDxgYj0SDHuZJy4u/xlkFhlfmfuc2xf+HdHj/fvRXX89bllfPbldr61X2cmnlLKyeXFLZ4zrfpptrf6Et5cN53Ma1ldXR2xXz20re7YzV5IU/rvACTwxahFG4Db1XNOf14rKioy+rNu3BHPQLAFqjpCRJao6mAR2YtAL6DS9BRxDxsIFr+av5zOoK9eYZMUObK/J5dv5Q/PbGRHw57PS6cC4dZTu3PGwK6hdQdPXk2kT5SI0NTUlNAxIw3ECtd6cNWn136Htd2GMuz3jyZ0nGSF+s7X1dG7m3DdnTP4xfjxAJSUlNiAMJMxog0Ei6cK6BbgauA94PsE6v+r2tvOjcVmBIvfoiljtXZyP8f2F2+VhpNVH7Gyjkaq7lh77eH61l/OiGvfqVZ5xDNjWqZVz5n8RQrjAIRAO8A/gceDv0t727mxOBkAkr0AZEtdac2UH+nHk/s7tr94c9w4eeGLNe9ApP3VTT5CF00ZG3Ff4e9bUVGRFhQUpFTGeAJdtnxWTO5LKgAQ6CW0ItZz0rk4FQCSvUhl07e6mlt+qB9NHujY/hL5Zh+eKdTv94eel+jrlOjdxEeTB+riW06JWJ720lcnepeSSWmrjWlPKncA1UDv9p6XjsWpAJBsNUU2jZhcfPPJunpyqWP7SzT4OREsE93Hh9eV6ZKbx7RZH6sqKdmLdzZ9FoxJJQC8BGwF/kNgQpjZwOz2tnNjcSoAJPvtLZu+9S25eYx+eF2Zo/tM10TkyR5z1fXluvTGUW3WxzuFZSJly6a7QWOiBYB4uoFOjuM5WaV3794Re2i0N4gm2e28INqEIo7uM5Gugk51g0zkmE34Ed3dZn209y1cogOfWnTDrKujVzcff753mnWlNFklnpHAr0Za0lE4t8Qz8jHSMP6sGjGpTaikLzdNa16MUm7y7YUvQgCI9L516NCBoqIiRITi4uI2Of4TpUlvaYx32r0DEJGttP18bwEWAZep6kduFMxN7Q2iad3/vHkY/7Rp05g2bVpWDBYT1PE7gER4kRe/Sfx0btjMB0tea7F+eL9eXHf1pdx27/1s+PRzDjqwB5f+9nzGnvL9Fs9rvV0ss597gT/dMIWdO78BYO2WJiZMmACQkZ8HYyKJZyDYZOAT4B8EuoT+FDgQWAX8RlVPcLmMIekaCJYLg3iW33giHRq30/dPCzwrQ7RJRtyafGTJlB8yeFt8E8ekquSOrdRtafu/k02fEZM/og0Ei3skcKt181X1SBFZqqqDHC5rVMkGgLdffJgdtQvjfv4x598ReTQr8Ob9lyR0bF+3Qxhx1h8S2sYJK24cib9pF0dMmpf2Y8cS7zSLydj06RrWvTM31SLGZcj3f0akf51kRjwb47ZUpoRsEpGfEBgEBvDjsMeyourzm/fmMHxj/AlMe3UT1kT4dterm/Dhc3/jTy/tZO0WpVc34YbvdeS/BnaIuB+/KKyDL0+oYL/uByVd/mSIKvFN95BesfLYpxoADjiwNwccmJ4G+d69r8yaDgHGRBWpa1D4AhwKPEMgDfTG4O/fAToBx7a3vZNLulJBROvi95vf/KbN+uYuhpG6KM5/9BbVykKdevcdaR8RuqLqGF1RdYzrx0lUNnWljcW6gZpsQrLjADJpSWcuoEj9z9sbUFRQUNDiAjD/sVt15hkdtVOnjmm/ULxzw9G6ouo4V4+RjFwaQGWpHky2SDoAAIcTGAS2Ivh3KfCn9rZzY3EjACTyTxzPgKKioqLQ8xc8frsWd4u8jdsXvHdvOFKX//l4V4+RDPvmbEz6RQsA8VQS3w9cBTQEq4yWEegJlPUSnbUpnvrd+vr6PX/4/BHbEsD9aRsztQ2goqKCadOmUVxc7FgffGNMcuK5QnRW1dZdaNqOtslCiU6sHWlAUSzi89O7W+S++D6fz5W5YkPHJn0DwRKd+7aiooLa2lqampqora21i78xHonnCrFJRL5NsMePiPwY2OBqqVwQ6SKVaLqC8G+v0RQV7ZmARXx+qkbtTaeOHds8r7GxMa67jmSFDwRzc3JyN+a+dbu8bu3bmKwTqV4ofCHQC+hFYDuwHngDKG5vOzeWZNsAotU7FxUVJV0/P3PmTO3QoUOL7Tp06NCiLnvR/92vWlmod9xyfaidoTk9cjLHTMT71w3Rt2/6vut17k436rpZXmt/MPmKVHsBAfsAXQmMHaiIdzsnl2QDQLSLVFFRUUoXhPYakGuem65aWagfrZgfWud0N8hoZfjgusG65OYxrve6cfp8kpl3IN5eOLnUA8mYRCQcAIBCAo2/9xCYClKAC4Fa4Olo27m5JBsAYl2k3OzKV/Pvv6tWFuqHS98MrXPyIhTrG+2H1w3SxTef7Hq/e6cvqm7OPJYrYxCMSVS0ABCrDeB/gb7AcgLTQM4BzgLGqeppMbZrl4icJSLviEiTiLSdqNhhsTJTutkg6fP5AWhqagytczKjaKxGbJ82gfhcz8rpdIbUeMubaAN+Ivs2Jm9EigqBgMHysN/9wJdA12jPT2QBjiAQXF4ByuPdzuk2ALfrft/+z8OqlYW6qublNuVx4q4j1jfajyf315opP0rLuTt5FxVveZP5Nm9tACZfkUQV0OJYfzuxpCsAqHozanPpS/9UrSzUlQtfcGX/sapfaif3C02Qnm0jVuMpb7JVT9n2WhjjhGQCQCPwVXDZSqDvf/PvX0XbLpElngAATCAw98Ci3r17u/wyOWvZq0+qVhbqu/P/7cr+Y32jXXPtd3XRreNcOW4msG/zxsQvWgCI2gagqn5VLQwuXVV1r7DfC2NXLIGIvCgiKyIsCbUfqOo0VS1X1fLu3bsnsqnnJNgGoC6lB441qlZQT2cEc5uNKDYmdfGkg06Kqp7k1r6zhfgCL29Tk3sDp1vPmds80GlNXR3f2m8Nt36rOmcvionMF2yMacu1AGDA5w/eATSmZ4KQ1pOtfPrlDpum0BgTlSd1BCJyuoisA44CnhWR570oh9v2VAGlJ3VSMl0jjTH5y5M7AFWdBcQ/RVeW8vkDL6+GjQNwU6K5jYwx+S13WwkzwJ47gPQEABvoZIxJhAUAF0mwF066AoDTo3KNMbnNAoCL9lQBpacNoEXXSODA/faxrpHGmKgsALgo1AsoTXcAsGeylfrKnjx13Vl28U+AzRVg8o0FABc1jwOINwA4eQESAsngTHzcmNjGmExnV4gonLgYN98B0GokcKR9R7sATZw4Maly+HJ8JLDTrAutyUc2ECyC1gOqmi/GkNiAKl+EO4Bo++7UqVPEC9B9993XnBMpoXKI2h1AIqwLrclH0nxxyQbl5eW6aNEi149TUlJCXV1dm/XFxcXU1tbGvZ/P1q3mW/8zhF3qp5HA3UDfO79g7ZbURgb36uZj1cX7x3xOJ9nF/AMrOPKCv6Z0rHzh1HtuTCYSkRpVbTP3it0BRODUt8EeB/dh/mGXwtbPQuvWbZmaUtkC+2hi6UFnAfD8wve57+kFfPbF13xr/y5ccNoIxgw/HBU/Pb/3q5SPlS+qqqpa3JmBdaE1eSBSitBMXVKZDyARbs4dm8j8xNEmPfH7/SoiWlRUpAUFBZYS2SE2V4DJVSQxJWTecnNAVbR933nnnW3SG19wwQVtngvQ2NiIqlJfX09DQ0OLx6zhMnluTg9qTEaKFBUydUnXHYCqu98GE9l3+HP9fn/EO4LWi01ybowJR5Q7AGsEziI+n4943q+ioiK6dOnCmjVr6N27N1VVVfZt1pg8Fq0R2KqAskg8Sd0KCgrYunWrDWgyxrTLAkAWidR+0KFDB4qKikLtBoWFhezatavFc6xdwBgTiQUAB7mdSybSPLjTp09n06ZNoYbLL774IuK2NqDJGNOatQE4pPUIXwj07kl3Nk4b0GSMac3aAFzmVi6ZRO8qbE4AY0y8LAA4JJ7Rw4lezJPJUBmpmsjmBDDGRGJVQA5pr+olmSoiq84xxjjBqoBc1l7VSzJVRJah0hjjJgsADmmv6iWZi7lN8m6McZMFAAfFyiWTzMXcGnSNMW6yAJAmyVzMrUHXGOMmawROo+rqaiZNmmQ5eowxaRWtEdgCgDHG5DjrBWSMMaYFCwDGGJOnLAAYY0yesgBgjDF5ygKAMcbkKQsAxhiTpywAGGNMnrIAkIPcnpnMGJMb9vLioCIyBTgV2AWsBv5bVTd7UZZc0zrtdPMcAoCNOjbGtODVHcALwABVLQXeB67yqBw5x62ZyYwxuceTAKCqc1R1d/DP+UBPL8qRi2wOAWNMvDKhDeA84F/RHhSRCSKySEQWbdy4MY3Fyk42h4AxJl6uBQAReVFEVkRYTgt7ziRgNxC1lVJVp6lquaqWd+/e3a3i5gybQ8AYEy/XGoFV9aRYj4vIeOBHwCjNppSkGa65odfSThtj2uNJOmgRORm4DRipqnHX61g6aGOMSVympYO+B+gKvCAib4vIfR6Vwxhj8pYn4wBU9TteHNcYY8wemdALyBhjjAcsABhjTJ6yAJBBLIePMSadPGkDMG1ZDh9jTLrZHUCGsBw+xph0swCQISyHjzEm3SwAZAjL4WOMSTcLABnCcvgYY9LNAkCGqKioYNq0aRQXFyMiFBcXM23aNGsANsa4xpNcQMmyXEDGGJO4TMsFZIwxxmMWAIwxJk9ZADDGmDxlAcAYY/KUBQBjjMlTWdULSEQ2AnVJbn4AsMnB4njJziUz5cq55Mp5gJ1Ls2JVbTOpelYFgFSIyKJI3aCykZ1LZsqVc8mV8wA7l/ZYFZAxxuQpCwDGGJOn8ikATPO6AA6yc8lMuXIuuXIeYOcSU960ARhjjGkpn+4AjDHGhLEAYIwxeSqvAoCIXC8iy0TkbRGZIyIHe12mZInIFBF5L3g+s0RkX6/LlAwROUtE3hGRJhHJyu56InKyiKwSkQ9F5Eqvy5MsEZkuIp+LyAqvy5IqEeklIi+LyMrg5+tir8uUDBHpKCILRWRp8DwmO7r/fGoDEJFCVf0q+PtFQD9VvcDjYiVFREYDL6nqbhG5GUBVr/C4WAkTkSOAJuBvwB9UNavyfYuIH3gf+D6wDngL+JmqvutpwZIgIscDXwN/V9UBXpcnFSJyEHCQqi4Wka5ADTAu294XERFgH1X9WkQKgDeAi1V1vhP7z6s7gOaLf9A+QNZGP1Wdo6q7g3/OB3p6WZ5kqepKVV3ldTlSMBz4UFU/UtVdwCPAaR6XKSmq+hrwhdflcIKqblDVxcHftwIrgUO8LVXiNODr4J8FwcWx61ZeBQAAEakSkbVABXCN1+VxyHnAv7wuRJ46BFgb9vc6svBCk8tEpAQYDCzwtiTJERG/iLwNfA68oKqOnUfOBQAReVFEVkRYTgNQ1Umq2guoBi70trSxtXcuwedMAnYTOJ+MFM95ZDGJsC5r7yxzjYh0AZ4ALmlVA5A1VLVRVcsI3OUPFxHHquf2cmpHmUJVT4rzqf8AngUqXSxOSto7FxEZD/wIGKUZ3JiTwHuSjdYBvcL+7gl84lFZTJhgnfkTQLWqPul1eVKlqptF5BXgZMCRhvqcuwOIRUQOC/tzLPCeV2VJlYicDFwBjFXV7V6XJ4+9BRwmIn1EpAPwU2C2x2XKe8HG0weAlap6m9flSZaIdG/u4ScinYCTcPC6lW+9gJ4A+hLodVIHXKCq670tVXJE5ENgb6A+uGp+NvZoEpHTgbuB7sBm4G1VHeNtqRIjIqcAdwB+YLqqVnlcpKSIyMPACQTSDn8GVKrqA54WKkkicizwOrCcwP87wNWq+px3pUqciJQCDxH4bPmAx1T1Osf2n08BwBhjzB55VQVkjDFmDwsAxhiTpywAGGNMnrIAYIwxecoCgDHG5CkLACZniMjX7T8r4X2WiMh/xXh8SjBL45Qk9l0W7EJqjCcsABgTWwkQNQAAvwaGqOrlSey7DEgoAEiA/d8aR9gHyeQcETlBRF4RkceDcyZUB0eGIiK1InJzMMf6QhH5TnD9gyLy47B9NN9N3AQcF5xD4vetjjObQFbZBSJydnDU5hMi8lZwOSb4vOEiMldElgR/9g2OGr4OODu477NF5FoR+UPY/lcE70BKgnnt/wosBnqJyOXBYyxzOke8yR8WAEyuGgxcAvQDDgWOCXvsK1UdDtxDYARvLFcCr6tqmareHv6Aqo4FdgQfexS4E7hdVYcBZwL/E3zqe8DxqjqYQAbaPwdTR18DPBq2fSx9CeTpHxz8/TACqajLgKHBXP7GJCTnksEZE7RQVdcBBFPplhCYTAPg4bCft7fdNGknAf2CNxsAhcHJSLoBDwVzUSmBnO6JqgubBGR0cFkS/LsLgYDwWrIFN/nJAoDJVd+E/d5Iy8+6Rvh9N8E74mB1UYckjukDjlLVHeErReRu4GVVPT2Ym/6VKNuHyhDUMez3beG7BG5U1b8lUUZjQqwKyOSjs8N+zgv+XgsMDf5+Gnu+pW8Fusa53zmEzTEhImXBX7sBzUkHzw17fut91wJDgtsOAfpEOc7zwHnBXPeIyCEi0iPOMhoTYgHA5KO9RWQBcDHQ3LB7PzBSRBYCI9jzjXsZsFsCk3L/vu2uWrgIKA82zL4LNGdnvQW4UUTeJJDVsdnLBKqM3haRswnkrt8/WGX1GwJzDbehqnMIzGcxT0SWA48Tf5AyJsSygZq8IiK1QLmqbvK6LMZ4ze4AjDEmT9kdgDHG5Cm7AzDGmDxlAcAYY/KUBQBjjMlTFgCMMSZPWQAwxpg89f8BDSKdlHgYJ7wAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "line_binned = encoder.transform(np.digitize(line,bins=bins))\n",
    "\n",
    "reg = DecisionTreeRegressor(min_samples_split=3).fit(x_binned,y)\n",
    "plt.plot(line,reg.predict(line_binned),label='decision tree')\n",
    "\n",
    "reg = LinearRegression().fit(x_binned,y)\n",
    "plt.plot(line,reg.predict(line_binned),label=\"Linear Regression\")\n",
    "\n",
    "plt.plot(X[:,0],y,'o',c='k')\n",
    "plt.ylabel(\"Regression output\")\n",
    "plt.xlabel(\"Input feature\")\n",
    "plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
